CC = g++

CHAPTER = CHAPTER7


ifeq ($(CHAPTER),CHAPTER4)
module += \
  symtable.o
endif

ifeq ($(CHAPTER),CHAPTER5)
module += \
  symtable.o \
  semantic.o
endif

ifeq ($(CHAPTER),CHAPTER7)
module += \
  symtable.o \
  semantic.o \
  IR.o
endif

module += \
  lex.yy.o \
  sysy.tab.o \
  ast.o \
  driver.o

run:parser

test:parser
	./parser ./src/test.sy

4%:parser
	./parser ./src/0$*.sy

5%:parser
	./parser ./src/case_$*.sy

7%:parser
	./parser ./src/a$*.sy

test_%:parser
	@printf "+++++TEST %s+++++\n" $*
	@make $* > /dev/null
	@diff myres/$*.res res/$*.res

ast.o:ast.c
	g++ -D$(CHAPTER) -c ast.c -o ast.o

lex.yy.o:lex.yy.c
	g++ -D$(CHAPTER) -c lex.yy.c -o lex.yy.o

sysy.tab.o:sysy.tab.c
	g++ -D$(CHAPTER) -c sysy.tab.c -o sysy.tab.o

%.o:%.cpp
	g++ -D$(CHAPTER) -c $*.cpp -o $*.o

parser:$(module)
	g++ -D$(CHAPTER) -o parser $(module)

lex.yy.c:sysy.tab.h
	flex sysy.l

sysy.tab.c:
	bison -d sysy.y
	
report:
	bison -d --report=all sysy.y

sysy.tab.h:sysy.tab.c

clean:
	rm -f *.d *.o lex.yy.c sysy.tab.c sysy.tab.h parser sysy.output \
	myres/*

add:
	git add origin https://gitee.com/chentianyun/sysy-parser.git

push:
	git add .
	git commit -m "chapter7"
	git push origin master

